package com.suray.basic.wcs.path.core.api;


import com.suray.basic.wcs.path.bo.ConnectPlanBO;
import com.suray.basic.wcs.path.bo.NodeAndPlanInfoBO;
import com.suray.basic.wcs.path.core.Node;

import java.util.List;

/**
 *
 */
public interface NodeChoose {
    /**
     * 从候选节点中选择一个离当前两个点的和最优的点
     *
     * @param current        第一个点
     * @param endNode        第二个点
     *                       库区
     * @param candidateNodes 候选点
     * @return 最合适的中间点（一般用于选择提升机）
     */
    Node getMostAccessibleNode(Node current, Node endNode, List<Node> candidateNodes);

    /**
     * 从候选列表中获取之于当前点的合适点
     *
     * @param current        当前点
     * @param candidateNodes 候选的所有可到达节点列表
     * @return
     */
    Node getMostAccessibleNode(Node current, List<Node> candidateNodes);

    /**
     * 从候选列表中获取之于当前点的合适点
     *
     * @param current
     * @param nodeAndPlanGridIdBOS
     * @return
     */
    NodeAndPlanInfoBO getMostAccessibleNodeAndPlanGridId(Node current, List<NodeAndPlanInfoBO> nodeAndPlanGridIdBOS);

    ConnectPlanBO getMostAccessibleConnectPlanBO(List<ConnectPlanBO> connectPlanBOS, Node targetNode, boolean isStartAndPre);
}
